home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / BARNET / ARMLINUX / ISCAFS / ISCAFS.ZIP / IscaFS0-05 / Support / ReadPart (.txt)
RISC OS BBC BASIC V Source  |  1998-05-28  |  4KB  |  113 lines

  1.  >ReadPart
  2.  by Phil Norman 18th November, 1997
  3.  Primitive program to read linux partitions and understand them (eventually)
  4. $+" at line "+
  5. init_vars
  6.  Variables that can be user-defined
  7. discnumber% = 4
  8. filesystem$ = "ADFS"
  9.  partition% is the partition as linux defines it - ie for /dev/hda3,
  10.   partition%=3
  11. partition%  = 3
  12.  disc_type% should be dt_long% or dt_short% depending on the version of
  13.  filecore you're using (see instructions)
  14. disc_type%=dt_long%
  15.  Filename to save the ext2 filesystem as
  16. outfile$="ADFS::4.$.image"
  17.  Number of sectors to read at once
  18. sectors_at_once% = 64
  19.  Variables that are set by the OS or calculated from user-given variables
  20.  above
  21. discname$=":"+
  22.  discnumber%
  23. partition_addr% = &1fc+&c00
  24. superblock_addr% = 1024
  25. superblock_len% = 1024
  26.  Initialise FileCore stuff
  27.  wa% 4
  28.  "OS_Module",18,"FileCore%"+filesystem$ 
  29.  ,,,,!wa%
  30.  Initialisation stuff
  31.  descriptor% &40
  32. "FileCore_DescribeDisc",discname$,descriptor%,,,,,,,wa%
  33. ,$sector_size% = 1<<(?descriptor%)
  34. -§ors_per_track% = descriptor%?1
  35. heads% = descriptor%?2
  36.  table% sector_size%*2
  37.  Read the part of the FileCore partition containing the position of the linux
  38.  partition table
  39. 3?sector_base% = (partition_addr%
  40.  sector_size%)*sector_size%
  41. 41sector_offset% = partition_addr%-sector_base%
  42. "FileCore_DiscOp",,1,sector_base%+(discnumber%<<29),table%,sector_size%,,,,wa% 
  43.  ,,,,unread%
  44.  unread% 
  45.  unread%+" not read."
  46. 8&format_id% = table%?sector_offset%
  47.  format_id%
  48. :Mstart_cyl% = (table%?(sector_offset%+1))+((table%?(sector_offset%+2))<<8)
  49. ;8start_sector% = start_cyl%*heads%*sectors_per_track%
  50. =#descriptor%!16 = 1024*1024*1024
  51.  Grab linux partition table
  52.  "Partition table sector  : "+
  53. ~start_sector%
  54.  "Partition table address : "+
  55. ~(start_sector%*sector_size%)
  56. read_sectors(start_sector%,2,table%)
  57. C&tabentry%=table%+12*(partition%-3)
  58.  !tabentry%=0 
  59.  0,"No such partition."
  60.  !tabentry%<>ptype_native% 
  61.  0,"Partition is not linux native."
  62. F1fs_startsector% = start_sector% + tabentry%!4
  63. G!fs_numsectors%  = tabentry%!8
  64.  "    start sector : "+
  65.  fs_startsector%
  66.  "    end sector   : "+
  67.  (fs_startsector%+fs_numsectors%-1)
  68.  Copy all the sectors in the filesystem into the given file
  69.  block% sectors_at_once%*sector_size%
  70. file%=
  71. (outfile$)
  72.  "Sectors to read : "+
  73.  (fs_numsectors%-1)
  74.  "Reading sector  :      ";
  75. step%=sectors_at_once%
  76.  c%=0 
  77.  fs_numsectors% 
  78.  step%
  79.  d%=1 
  80.  (fs_numsectors%-c%)<=step% 
  81.  step%=2
  82. read_sectors(fs_startsector%+c%,step%,block%)
  83. "OS_GBPB",2,file%,block%,sector_size%*step%
  84. #file%
  85.  Set filetype and exit
  86.  "Setting filetype..."
  87. ("settype "+outfile$+" 0b0")
  88.  "Done!"
  89. init_vars
  90.   ptype_swap%=&deafab1e
  91.   ptype_native%=&deafa1de  
  92.   dt_short%=0
  93.   dt_long%=1
  94. read_sectors(sect%,num%,mem%)
  95.  disc_type%=dt_long% 
  96. pu    
  97. "FileCore_SectorOp",,1+(descriptor%<<6),sect%+(discnumber%<<29),mem%,num%*sector_size%,,,,wa% 
  98.  ,,,,unread%
  99. r*    
  100.  (sect%*sector_size%)
  101. &e0000000 
  102. sc      
  103.  "Error in PROCread_sectors: Your version of FileCore cannot read this far into a disc."
  104.       
  105. u        
  106.       
  107. "FileCore_DiscOp",,1+(descriptor%<<6),sect%*sector_size%+(discnumber%<<29),mem%,num%*sector_size%,,,,wa% 
  108.  ,,,,unread%
  109. w        
  110.  unread% 
  111.  "Warning in PROCread_sectors: "+
  112.  unread%+" bytes not read."
  113.